package com.jinyang.jetpackdemo.activity.ui;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
import com.jinyang.jetpackdemo.R;

/**
 * @Author: LiuJinYang
 * @CreateDate: 2020/5/16
 * Glide框架的封装
 */
public class GlideUtil {

    /**
     * 加载网络图片
     *
     * @param context   上下文对象
     * @param imgUrl    资源地址
     * @param imageView 目标view
     */
    public static void loadImg(Context context, String imgUrl, ImageView imageView) {
        loadImg(context, imgUrl, imageView, R.mipmap.ic_launcher);
    }

    /**
     * 加载网络图片(占位图)
     *
     * @param context        上下文对象
     * @param imgUrl         资源地址
     * @param imageView      目标view
     * @param placeholderRes 占位图参数
     */
    public static void loadImg(Context context, String imgUrl, ImageView imageView, int placeholderRes) {

        if (TextUtils.isEmpty(imgUrl)) {
            imageView.setImageResource(placeholderRes);
            return;
        }
        Glide.with(context.getApplicationContext())
                .load(imgUrl)
                .placeholder(placeholderRes)
                .fitCenter()
                .error(placeholderRes)
                .into(imageView);

    }




    /**
     * 通过回调获取bitmap
     * 在Glide 4中是先asBitmap()再load()的，如果写错了顺序就会报错
     */
    public static void getBitmap(Context context, String imgUrl, final Callback callback) {
        if (TextUtils.isEmpty(imgUrl) || context == null) {
            return;
        }
        context = context.getApplicationContext();

        Glide.with(context).asBitmap()
                .load(imgUrl)
                .into(new CustomTarget<Bitmap>() {
                          @Override
                          public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                              //回调内容
                              callback.onCall(resource);
                          }

                          @Override
                          public void onLoadCleared(@Nullable Drawable placeholder) {
                              //这个方法在target被回收时调用，如果在除了imageView以外的地方引用了imageView中的bitmap，在这里清除引用以避免崩溃
                          }

                          @Override
                          public void onLoadFailed(@Nullable Drawable errorDrawable) {
                              super.onLoadFailed(errorDrawable);
                              callback.onCall(null);
                          }

                      }
                );
    }

    public interface Callback {
        void onCall(Bitmap bitmap);
    }

}
